from comment.model import db
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash


# 用户模型类
class User(db.Model):
    __tablename__ = 't_user'
    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True)
    username = db.Column(db.String(64), doc="用户名")
    # 数据库中存放的是一个加密过后的密文，采用Flask提供的hash算法，生成一个128位的明文数据
    password = db.Column(db.String(128), doc="密码")
    icon = db.Column(db.String(5000), doc="用户头像")
    email = db.Column(db.String(100), doc="邮箱")
    nick_name = db.Column(db.String(200), doc="昵称")
    note = db.Column(db.String(500), doc="备注")
    phone = db.Column(db.String(11), doc="手机号")

    login_time = db.Column(db.DateTime, default=datetime.now(), doc="登陆时间")
    create_time = db.Column(db.DateTime, default=datetime.now(), doc="用户注册时间")
    update_time = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now(), doc="用户修改时间")
    status = db.Column(db.Integer, doc="用户状态")

    # 添加一个属性用来给password进行加密
    @property  # 是一个pwd属性的getter函数
    def pwd(self):
        return self.password

    @pwd.setter  # 是一个pwd属性的setter
    def pwd(self, x_password):
        """
        根据一个明文的密码，转换成密文
        :param x_password: 密码的明文
        :return:加密之后的数据
        """
        self.password = generate_password_hash(password=x_password)  # 根据flask提供的算法来加密

    def check_password(self, x_password):  # 检验加密的数据
        """
        验证密码
        :param x_password: 明文
        :return:
        """
        return check_password_hash(self.password, x_password)
